package com.icinfo.cloud.provider.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.ObjectUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 检查-检查对象证件类型
 */
@AllArgsConstructor
public enum CheckCertTypeEnum {

    /**
     * 出生医学证明
     */
    CERTTYPE_5("5", "出生医学证明", "CSYXZM"),
    /**
     * 中国人民解放军士兵证
     */
    CERTTYPE_6("6", "中国人民解放军士兵证", "JFJSBZ"),
    /**
     * 中国人民武装警察部门士兵证
     */
    CERTTYPE_7("7", "中国人民武装警察部门士兵证", "WZJCBMSBZ"),
    /**
     * 中国人民解放军文职人员证
     */
    CERTTYPE_8("8", "中国人民解放军文职人员证", "JFJWZRYZ"),
    /**
     * 中国人民武装警察部门文职人员证
     */
    CERTTYPE_9("9", "中国人民武装警察部门文职人员证", "WZJCBMWZRYZ"),
    /**
     * 居住证
     */
    CERTTYPE_10("10", "居住证", "JZZ"),
    /**
     * 外交护照
     */
    CERTTYPE_11("11", "外交护照", "WJHZ"),
    /**
     * 公务护照
     */
    CERTTYPE_12("12", "公务护照", "GWHZ"),
    /**
     * 公务普通护照
     */
    CERTTYPE_13("13", "公务普通护照", "GWPTHZ"),
    /**
     * 临时居民身份证
     */
    CERTTYPE_1("1", "临时居民身份证", "LSSFZ"),

    /**
     * 中华人民共和国居民身份证
     */
    CERT_10("10", "中华人民共和国居民身份证", "SFZ"),
    /**
     * 中华人民共和国军官证
     */
    CERT_20("20", "中华人民共和国军官证", "JRSFZ"),
    /**
     * 中华人民共和国警官证
     */
    CERT_30("30", "中华人民共和国警官证", "WZJCSFZ"),
    /**
     * 外国（地区）护照
     */
    CERT_40("40", "外国（地区）护照", "HZ"),
    /**
     * 香港特别行政区护照
     */
    CERT_51("51", "香港特别行政区护照", "GAJM"),
    /**
     * 香港（永久性）居民身份证
     */
    CERT_52("52", "香港（永久性）居民身份证", "GAJM"),
    /**
     * 澳门特别行政区护照
     */
    CERT_53("53", "澳门特别行政区护照", "GAJM"),
    /**
     * 澳门（永久性）居民身份证
     */
    CERT_54("54", "澳门（永久性）居民身份证", "GAJM"),
    /**
     * 港澳居民来往内地通行证
     */
    CERT_55("55", "港澳居民来往内地通行证", "GAJM"),
    /**
     * 台湾居民身份证
     */
    CERT_56("56", "台湾居民身份证", "TWJM"),
    /**
     * 台湾居民来往大陆通行证
     */
    CERT_57("57", "台湾居民来往大陆通行证", "TWJM"),
    /**
     * 台湾农民身份有关证明
     */
    CERT_58("58", "台湾农民身份有关证明", "TWJM"),
    /**
     * 户口薄
     */
    CERT_60("60", "户口薄", "HKB"),
    /**
     * 其他有效身份证件
     */
    CERT_90("90", "其他有效身份证件", "SFZ");
    /**
     * 证件类型编码
     */
    @Getter
    private String code;
    /**
     * 证件类型名称
     */
    @Getter
    private String name;
    /**
     * 处罚系统证件类型编码
     */
    @Getter
    private String punishCode;


    public static String getPunishCodeByCode(String code){
        if (ObjectUtils.isEmpty(code)) {
            return null;
        }
        for (CheckCertTypeEnum value : CheckCertTypeEnum.values()) {
            if (code.equals(value.getCode())){
                return value.getPunishCode();
            }
        }
        return null;
    }


    /**
     * 将检查的证据类型转换为处罚的证据类型
     */
    public static Map<String, String> convertPunishCode(String checkCertType, String checkCertCode){
        String legalCertType = checkCertType;
        String legalCertNo = checkCertCode;
        if (CheckCertTypeEnum.CERTTYPE_5.getPunishCode().equals(checkCertType)
                || CheckCertTypeEnum.CERTTYPE_8.getPunishCode().equals(checkCertType)
                || CheckCertTypeEnum.CERTTYPE_9.getPunishCode().equals(checkCertType)){
            // 检查-出生医学证明/中国人民解放军文职人员证/中国人民武装警察部内文职人员证 这三种类型不需要回显
            legalCertType = "";
            legalCertNo = "";
        }else if(CheckCertTypeEnum.CERTTYPE_6.getPunishCode().equals(checkCertType)){
            // 检查-中国人民解放军士兵证 对应 处罚-军人身份证
            legalCertType = CertTypeEnum.JRSFZ.getCode();
        } else if (CheckCertTypeEnum.CERTTYPE_7.getPunishCode().equals(checkCertType)) {
            // 检查-中国人民武装警察部门士兵证 对应 处罚-武装警察身份证
            legalCertType = CertTypeEnum.WZJCSFZ.getCode();
        } else if (CheckCertTypeEnum.CERTTYPE_11.getPunishCode().equals(checkCertType)
                || CheckCertTypeEnum.CERTTYPE_12.getPunishCode().equals(checkCertType)
                || CheckCertTypeEnum.CERTTYPE_13.getPunishCode().equals(checkCertType)) {
            // 检查-外交护照/公务护照/公务普通护照 对应 处罚-护照
            legalCertType = CertTypeEnum.HZ.getCode();
        } else if (CheckCertTypeEnum.CERTTYPE_1.getPunishCode().equals(checkCertType)) {
            // 检查-临时居民身份证 对应 处罚-身份证
            legalCertType = CertTypeEnum.SFZ.getCode();
        }
        Map<String, String> map = new HashMap<>();
        map.put("certType",legalCertType);
        map.put("certNo",legalCertNo);
        return map;
    }

}
